<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script>
    // 创建symbol的属性值
    let sb = Symbol();
    console.log(sb);
    console.log(typeof (sb));
    // 每一个定义的symbol都是唯一的
    // 一个等号是赋值，两个等号是比较
    let sb2 = Symbol()
    // console.log(sb2);

    console.log(sb == sb2);//返回false
    console.log(2 == 2);//返回true

    // 定义个对象
    let symbol = Symbol('address')//可以加参数指定属性名
    let obj = {
      name: 'sml',
      age: '18'
    }
    // 想对象增加额外属性
    console.log(obj);
    // 追加属性
    obj.address = "北京"//之前追加写法，属性多的情况下会出现属性重复
    console.log(obj);
    obj[symbol] = "上海"
    console.log(obj);

    //因为symbol具有唯一性，所以我们可以用symbol定义常量
    const Sys = Symbol(123321)
    console.log(Sys);

    // symbol.for（）全局搜索指定key的symbol，
    // 找到的话就返回该symbol，找不到的话就新建一个
    let s1 = Symbol("f153")
    let s2 = Symbol("f193")
    console.log(s1 == s2);
    let s5 = Symbol.for("369")
    let s11 = Symbol.for("56369")
    console.log(s11 == s5);
    // let s1l1 = Symbol.for("大美女")//s1l1去找有没有这个symbol，如果没有他就创建
    console.log(Symbol.for("大美女") == Symbol.for("大美女"));//返回true
    console.log(Symbol("f153") == Symbol("f153"));//每一个sybol都是唯一的


    // symbol.keyfor返回一个已登记的symbol类型值的key
    // 用来检测该字符串参数作为名称的symbol值是否已经被登记

    let s3 = Symbol.keyFor(s11)
    console.log(s3);
  </script>
</head>

<body>

</body>

</html>